package lormi.meipin.util;

import lormi.meipin.exception.LMException;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * 日期时间转换工具
 * */
public class DateUtil {
	/**
	 * 默认时间类型
	 * */
	private enum DateType {
		 /**
		  * @parameter 2016-01-20 15:45:15
		  * */
		 yyyyMMddHHmmss("yyyy-MM-dd HH:mm:ss"),/**2016-01-20 15:45:15*/
		 yyyyMMddHHmm("yyyy-MM-dd HH:mm"), /**2016-01-20 15:45*/
		 yyyyMMdd("yyyy-MM-dd"), /**2016-01-20*/
		 yyMMdd("yy-MM-dd"), /**16-01-20*/
		 yyyyMM("yyyy-MM"), /**2016-01*/
		 yyMM("yy-MM"),/**16-01*/
		 yyyy("yyyy"),/**2016*/
		 MM("MM"),/**01*/
		 dd("dd"),/**20*/
		 HHmmss("HH:mm:ss"),/**15:45:15*/
		 HHmm("HH:mm"),/**15:45*/
		 HH("HH"),/**15*/
		 EEEE("EEEE");/**星期三*/
		 
        // 成员变量
        private String dateStr;

        // 构造方法
        DateType(String dateStr) {
            this.dateStr = dateStr;
        }
        
        // 覆盖方法
        @Override
        public String toString() {
            return this.dateStr;
        }
    }
	
	private static SimpleDateFormat format = null;

	/**
	 * 根据给定的时间计算出token有效期
	 * */
	public static Date tokenExTime(){
		 return new Date(new Date().getTime()+15*24*3600*1000);
		
	}
	public static Date tokenExTime(Date date){
		 return new Date(date.getTime()+15*24*3600*1000);
		
	}
	/**
	 * 日期=>字符串  自定义设置类型
	 * */
	public static String formaDateToString(Date date,String typeString){
		 format = new SimpleDateFormat(typeString);
		 return format.format(date);
		
	}
	/**
	 * 日期=>字符串格  使用已有的枚举类型
	 * */
	public static String formaDateToString(Date date,DateType dateString){
		 return formaDateToString(date,dateString.dateStr);
		
	}
	
	/**
	 * 字符串=>日期  自定义设置类型 
	 **/
	public static Date formaStringToDate(String dateStr,String typeString){
		 format = new SimpleDateFormat(typeString);
		 try {
			return format.parse(dateStr);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return null;
	}
	/**
	 * 字符串=》日期  使用已有的枚举类型
	 * */
	public static Date formaStringToDate(String dateStr,DateType dateString){
		return formaStringToDate(dateStr,dateString.dateStr);
	}
	
	/**
	 * 判断 当前时间 - 给予的时间 < 给予的毫秒数  
	 * */
	public static boolean checkDateisValid(Date date,Integer time) throws LMException{
		return (new Date().getTime()-date.getTime())<time?true:false;
	}
	
	/**
	 * 自定义相对时间，例如：今天，一天前
	 * */
	@SuppressWarnings("deprecation")
	public static String getTime(Date date){
		String dd[] = {"一","二","三","四","五","六","七","八","九","十",
				"十一","十二","十三","十四","十五"};
		String time;
		Date now = new Date();
		int d = getTimeBetween(date,now);
		if(d==0){
			time = "今天";
		}else if(d>0 && d<=15){
			time = dd[d-1]+"天前";
		}else{
			if(date.getYear()==now.getYear()){
				time = new SimpleDateFormat("M-d").format(date);
			}else{
				time = new SimpleDateFormat("yyyy-M-d").format(date);
			}
		}
		return time;
	}
	/**
	 * 自定义相对时间，例如：今天，一天前
	 * */
	public static String getTime(String date){
		try {
			return getTime(new SimpleDateFormat("yyyy-MM-dd").parse(date));
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return date;
	}
	/**
	 * 获取时间跨度，单位：天
	 * */
	public static int getTimeBetween(Date date1,Date date2){
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");  
		try {
			date1=sdf.parse(sdf.format(date1));
			date2=sdf.parse(sdf.format(date2));
		} catch (ParseException e) {
			e.printStackTrace();
		}    
        Calendar cal = Calendar.getInstance();    
        cal.setTime(date1);    
        long time1 = cal.getTimeInMillis();                 
        cal.setTime(date2);    
        long time2 = cal.getTimeInMillis();         
        long between_days=(time2-time1)/(1000*3600*24); 
       return Integer.parseInt(String.valueOf(between_days));  
	}
	
	public static String getDate(String date){
		try {
			return getDate(new SimpleDateFormat("yyyy-MM-dd").parse(date));
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return date;
	}
	@SuppressWarnings("deprecation")
	public static String getDate(Date date){
		Date now = new Date();
		if(date.getYear()==now.getYear()){
			return new SimpleDateFormat("M月d日").format(date);
		}else{
			return new SimpleDateFormat("yyyy年M月d日").format(date);
		}
	}
	
	public static void main(String[] args) {
		System.out.println(DateUtil.getTime("2015-6-10"));
	}
	
}
